hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

golang 断言是什么_后端开发

2019-12-11后端开发ki4网26°c
A+ A-

Go言语内里有一个语法,能够直接推断是不是是该范例的变量: value, ok = element.(T),这里value就是变量的值,ok是一个bool范例,element是interface变量,T是断言的范例。

假如element内里确切存储了T范例的数值,那末ok返回true,不然返回false。

package main
 
import (
  "fmt"
)
 
type Order struct {
  ordId   int
  customerId int
  callback func()
}
 
func main() {
  var i interface{}
  i = Order{
    ordId:   456,
    customerId: 56,
  }
  value, ok := i.(Order)
  if !ok {
    fmt.Println("It's not ok for type Order")
    return
  }
  fmt.Println("The value is ", value)
}

输出:

The value is  {456 56 <nil>}

罕见的还有效switch来断言:

package main
 
import (
  "fmt"
)
 
type Order struct {
  ordId   int
  customerId int
  callback func()
}
 
func main() {
  var i interface{}
  i = Order{
    ordId:   456,
    customerId: 56,
  }
  switch value := i.(type) {
    case int:
      fmt.Printf("It is an int and its value is %d\n", value)
    case string:
      fmt.Printf("It is a string and its value is %s\n", value)
    case Order:
      fmt.Printf("It is a Order and its value is %v\n", value)
    default:
      fmt.Println("It is of a different type")
    }
}

输出:

It is a Order and its value is {456 56 <nil>}

golang的言语中供应了断言的功用。golang中的一切顺序都完成了interface{}的接口,这意味着,一切的范例如string,int,int64以至是自定义的struct范例都就此具有了interface{}的接口,这类做法和java中的Object范例比较相似。那末在一个数据经由历程func funcName(interface{})的体式格局传进来的时刻,也就意味着这个参数被自动的转为interface{}的范例。

如以下的代码:

func funcName(a interface{}) string {
     return string(a)
}

编译器将会返回:

cannot convert a (type interface{}) to type string: need type assertion

此时,意味着全部转化的历程须要范例断言。范例断言有以下几种情势:

直接断言运用

var a interface{}
fmt.Println("Where are you,Jonny?", a.(string))

然则假如断言失利平常会致使panic的发作。所以为了防备panic的发作,我们须要在断言前举行肯定的推断。

value, ok := a.(string)

假如断言失利,那末ok的值将会是false,然则假如断言胜利ok的值将会是true,同时value将会获得所期待的准确的值。示例:

value, ok := a.(string)
if !ok {
    fmt.Println("It's not ok for type string")
    return
}
fmt.Println("The value is ", value)

别的也能够合营switch语句举行推断:

var t interface{}
t = functionOfSomeType()
switch t := t.(type) {
default:
    fmt.Printf("unexpected type %T", t)       // %T prints whatever type t has
case bool:
    fmt.Printf("boolean %t\n", t)             // t has type bool
case int:
    fmt.Printf("integer %d\n", t)             // t has type int
case *bool:
    fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool
case *int:
    fmt.Printf("pointer to integer %d\n", *t) // t has type *int
}

别的补充几个go言语编程的小tips:

(1)假如不符合请求能够尽快的return(return as fast as you can),而削减else语句的运用,如许能够越发直观一些。

(2)转换范例的时刻假如是string能够不必断言,运用fmt.Sprint()函数能够到达想要的结果。

(3)变量的定义和说明能够用组的体式格局,如:

var (
   a string
   b int
   c int64
   ...
)
import (
    "fmt"
    "strings"
    "net/http"
   ...
)

(4)函数逻辑比较复杂,能够把一些逻辑封装成一个函数,进步可读性。

(5)运用net/http包和net/url包的函数,可能会带有url encode功用,须要注重。

ki4网,有大批免费的Golang入门教程,迎接人人进修!

以上就是golang 断言是什么的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
golang 断言是什么_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:
推荐阅读

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>