golang 将接口值与#golang中的nil进行比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 将接口值与#golang中的nil进行比较相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
	"reflect"
)

// This is another way of determining if a variable's value is nil.
// Imagine you have an interface with the following signature:

type recorder interface{}
type myStruct struct{}

// Assume this function has to have this signature.
func object() recorder {
	// Let's say this function gets the object by calling a dependency, and receives
	// a nil value.
	var obj *myStruct
	return obj
}

func main() {
	obj := object()
	fmt.Println("Direct comparison:", obj == nil)
	fmt.Println("Compare by reflection:", reflect.ValueOf(obj).IsNil())

	// Output:
	//
	// Direct comparison: false
	// Compare by reflection: true
}
package main

import (
	"fmt"
	"reflect"
)

// See nil_interface_value_example.go

func main() {
	fmt.Println(reflect.ValueOf(obj).IsNil() == true)
}

如何将二维数组中的值与 GoLang 中的一维数组中的值进行比较?

【中文标题】如何将二维数组中的值与 GoLang 中的一维数组中的值进行比较?【英文标题】:How can I compare values in 2D array with values in 1D array in GoLang? 【发布时间】:2021-02-13 04:34:06 【问题描述】:

我需要比较一维数组和二维数组的值,并使用 Go 返回具有相似值的结果数组:

func absolutePermutation(n int32, k int32) []int32 
    var position []int32

    var i, j int32
    var result []int32
    for i = 1; i <= n; i++ 
        position[i-1] = i
    

    x := getPermutations(position)
    resVal := permNum(n)
    fmt.Println(x)

    for i = 0; i < resVal; i++ 

        for j = 0; j < 4; j++ 

            fmt.Println(x[i][j])

            **if int32(math.Abs(float64(position[(j*resVal)+i])-float64(x[i][j]))) == k** 
                result[i] = x[i][j]
             else 
                continue
            
        
    

    return result


func getPermutations(elements []int32) [][]int32 
    permutations := [][]int32
    if len(elements) == 1 
        permutations = [][]int32elements
        return permutations
    
    for i := range elements 
        el := make([]int32, len(elements))
        copy(el, elements)

        for _, perm := range getPermutations(append(el[0:i], el[i+1:]...)) 
            permutations = append(permutations, append([]int32elements[i], perm...))
        
    
    return permutations



func permNum (n int32) int32 

    if n == 0 
        return 1
     
    
    return n * permNum(n-1)

我尝试创建位置(此处将一维数组转换为二维数组。)但它没有意义。 作为 GoLang 的新手,我在这段代码中遇到了这个错误,该代码是为了获取给定数字的排列而编写的:

运行时错误:索引超出范围 [0],长度为 0

【问题讨论】:

【参考方案1】:

我在一定程度上解决了。你可以参考这个。

 func absolutePermutation(n int32, k int32) []int32 
        var buffer [1024 * 1024]int32
        position := buffer[0:n]
        result := make([]int32, n)    
        var i, j int32
    
    for i = 1; i <= n; i++ 
        position[i-1] = i
    
    x := getPermutations(position)

    for i = 0; i < permNum(n); i++ 
        for j = 0; j < n; j++   
            if int32(math.Abs(float64(position[j])-float64(x[i][j]))) == k 
                result[j] = x[i][j]
                if j==n-1
                    return result
                       
            else
            break
            
        
    
    result = nil
    return result    

【讨论】:

以上是关于golang 将接口值与#golang中的nil进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何将二维数组中的值与 GoLang 中的一维数组中的值进行比较?

GoLang接口---中

golang http 服务器的接口梳理

Golang 空指针nil的方法和数据成员

如何将 nil 接口转换为 nil 其他接口

golang的nil