8

golang的强制类型转换

 4 years ago
source link: https://studygolang.com/articles/21591?fr=sidebar
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

golang的强制类型转换

紫葡萄0 · 2019-07-02 01:32:38 · 32661 次点击 · 预计阅读时间 2 分钟 · 不到1分钟之前 开始浏览    
这是一个创建于 2019-07-02 01:32:38 的文章,其中的信息可能已经有所发展或是发生改变。

golang是一种强类型语言,虽然在代码中经常看到这种写法,i:=10这其实这是编译器自动做了类型推断在编译期间。编译器会对数据进行类型检查。不同类型的数据不能赋值,不能在函数中传参。强类型语言有一些优势,很多的错误会在编译期间被检查出来,不想php和python等弱类型语言,很多错误只有运行到才能被发现。同样,强类型也有一些缺点,写代码的时候要考虑数据类型了,失去了一些灵活性。
言归正传,开始golang的类型转换问题
golang的类型转换和C/C++ java等语言的类型转换还有点区别

  1. C/C++等语言有隐式类型转换,golang中没有
  2. golang中的类型转换分强制类型转换类型断言
    在C/C++中
int main()
{
    int a=5;
    float b=3.5;
    printf("%f",a*b);
}

这样的代码是没有问题的,编译器隐式的把a向上转为float类型。
但是在golang中

package main

import "fmt"

func main() {
    var a float32 = 5.6
    var b int = 10
    fmt.Println (a * b)
}

这样的代码会报错,因为类型不匹配
这时候需要强制类型转换

package main

import "fmt"

func main() {
    var a float32 = 5.6
    var b int = 10
    fmt.Println (a * float32(b))
}

这样就不会报错了
普通变量类型int,float,string 都可以使用 type (a)这种形式来进行强制类型转换,比如

var a int32  = 10
var b int64 = int64(a)
var c float32 = 12.3
var d float64 =float64(c)

golang中 指针也是有类型的,

package main

func main() {
    var a int = 10
    var p *int =&a
    var c *int64 
    c= (*int64)(p)
}

这样的代码是错误的,编译器会提示cannot convert p (type *int) to type *int64
指针的强制类型转换需要用到unsafe包中的函数实现

package main

import "unsafe"
import "fmt"

func main() {
    var a int =10
    var b *int =&a
    var c *int64 = (*int64)(unsafe.Pointer(b))
    fmt.Println(*c)
}

golang中还有一中类型判断,类型断言

package main

import "fmt"

func main() {
    var a interface{} =10
    switch a.(type){
    case int:
            fmt.Println("int")
    case float32:
            fmt.Println("string")
    }
}

程序输出结果是int

类型断言还有一种用法

package main

import "fmt"

func main() {
    var a interface{} =10
    t,ok:= a.(int)
    if ok{
        fmt.Println("int",t)
    }
    t2,ok:= a.(float32)
    if ok{
        fmt.Println("float32",t2)
    }
}

t,ok:= a.(int)有两个返回值,第一个是对应类型的值,第二个是bool类型的,类型判断是否正确。

好了,golang的强制类型转换写写到这,半夜困了,想到啥在补充吧。下次写一下golang中数字和字符串之间的转换


Recommend

  • 31
    • studygolang.com 6 years ago
    • Cache

    golang: 类型转换和类型断言

    类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说...

  • 66
    • studygolang.com 6 years ago
    • Cache

    Golang类型转换模块 - gconv

    文章来源: https://gfer.me/util/gconv/index gf 框架提供了非常强大的类型转换包 gconv ,可以实现将任何数据类型转换为指定的数据...

  • 8
    • blog.csdn.net 4 years ago
    • Cache

    Object强制转换为List

    Object强制转换为List 1.采过的坑 java中如果是直接将某...

  • 4

    请保留-> 【原文:  https://blog.csdn.net/luobing4365 和 http://yiiyee.cn/blog/author/luobing/】 最近有个项目开发,我需要构建几...

  • 10
    • studygolang.com 3 years ago
    • Cache

    golang类型转换与断言

    golang类型转换与断言 13641329565 · 1天之前 · 100 次点击 · 预计阅读时间 1 分钟 · 大...

  • 9

    详细介绍 C++ 的强制转换方法 2020-11-20 Friday     C/C++, Program 在 C 中提供了强制类型转换,不过其实现很简单,而且没有区分具体的使用场景,所以,在编译或者运行阶段可能会出现一些...

  • 7
    • jiac3366.github.io 2 years ago
    • Cache

    Golang | 类型转换

    +c编程手记 Guangzhou, China“类型断言”表达式 value, ok := interface{}(container).([]string) ——理解为python的isinstance()还有额外转换赋值功能interface{}(container) 把containe...

  • 5
    • example.com 2 years ago
    • Cache

    Golang中类型转换

    Example Domain This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.

  • 10
    • wiki.eryajf.net 2 years ago
    • Cache

    golang数据类型转换汇总

    golang作为强类型语言,我们在日常开发过程中,遇到类型转换的场景也非常多,本文整理我在工作开发中遇到过的类型转换实践。

  • 3

    🚩write in front🚩   🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 阿里云星级博主~掘金⇿InfoQ~51CTOP创...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK